home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / thesource-7.lha / Source / Articles / Stereoscopic / SegaGlasses.lha / SegaGlasses / circuit.lcd < prev    next >
Text File  |  1992-09-15  |  13KB  |  302 lines

  1.  
  2.  
  3.                      SEGA GLASSES INTERFACE FOR THE RS232 PORT
  4.                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5.  
  6.                      Comments/enquiries/money(8-)) to:
  7.  
  8.                      Glen Harris
  9.                      2harrig@wench.ece.jcu.edu.au
  10.                      James Cook University of North Queensland
  11.  
  12.  
  13.  
  14.      First off, here's the circuits:      Warning! This is drawn using ASCII
  15.                                           graphics characters.  It may not
  16.                                           print out correctly on some printers.
  17.  
  18.      RTS/DTR control version
  19.      ~~~~~~~~~~~~~~~~~~~~~~~
  20.  
  21.                     +VE
  22.                      ³
  23.     ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄoÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  24.     ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ¿          ³
  25.     ³ ³   ÚÄÄÄÄÄÄÄÄ¿ ³        ³          ³        ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  26.     ³ ³ ÚÄ´1      8ÃÄoÄ%%%%Ä¿ ³      ÚÄÄÄÅÄÄ¿  ÚÄÄÅÄÄÄÄÄoÄÄoÄÄÄ¿ ³
  27.     ³ ³ ³ ³        ³    R1  ³ ³      ³   ³  ³  ³  ³     ³  ³   ³ ³
  28.     ³ ÀÄÅÄ´2      7ÃÄÄÄÄÄÄÄÄo ³      ³ ÚÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄ¿ ³ ³
  29.     ³   ³ ³  IC1   ³    R2  ³ ³      ³ ³14 13 12 11 10  9  8 ³ ³ ³
  30.     ³ ÚÄÅÄ´3      6ÃÄoÄ%%%%ÄÙ ³      ³ ³         IC2         ³ ³ ³
  31.     ³ ³ ³ ³        ³ ÀÄÄÄÄÄÄÄÄo      ³ ³ 1  2  3  4  5  6  7 ³ ³ ³     TO STEREO
  32.     ÀÄÅÄÅÄ´4      5ÃÄÄÄÄ¿     ³      ³ ÀÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÙ ³ ³     CONNECTOR
  33.       ³ ³ ÀÄÄÄÄÄÄÄÄÙ    ³     ³      ³   ³  ³  ³  ³  ³  ³  ³   ³ ³     =========
  34.       ³ ³           C1 ===   === C2  ÀÄÄÄoÄÄÅÄÄÅÄÄÅÄÄÅÄÄÙ  ³   ³ ÀÄÄÄÄ COMMON
  35.       ³ ³               ³     ³          ³  ³  ³  ÀÄÄÅÄÄÄÄÄÅÄÄÄÅÄÄÄÄÄÄ TIP
  36.       ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄoÄÄÄÄÄo          ³  ³  ÀÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÅÄÄÄÄÄÄ MIDDLE
  37.       ³                 ³     ÀÄÄÄÄÄÄÄÄÄÄÅÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄoÄÄÄÙ
  38.       ³                GND               ³  ³        ³     ³
  39.       ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ DTR      RTS   GND
  40.                                            TO RS232 CONNECTOR
  41.  
  42.  
  43.      RTS only version
  44.      ~~~~~~~~~~~~~~~~
  45.  
  46.                     +VE
  47.                      ³
  48.     ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄoÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄoÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  49.     ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ¿          ³              ³
  50.     ³ ³   ÚÄÄÄÄÄÄÄÄ¿ ³        ³          ³        ÚÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄ¿
  51.     ³ ³ ÚÄ´1      8ÃÄoÄ%%%%Ä¿ ³      ÚÄÄÄÅÄÄ¿  ÚÄÄÅÄÄÄÄÄÅÄÄÄÄÄÄÄÄ¿ ³
  52.     ³ ³ ³ ³        ³    R1  ³ ³    ÚÄÅÄÄÄÅÄÄÅÄÄÅÄÄÅÄÄ¿  ³  ÚÄÄÄ¿ ³ ³
  53.     ³ ÀÄÅÄ´2      7ÃÄÄÄÄÄÄÄÄo ³    ³ ³ ÚÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄ¿ ³ ³ ³
  54.     ³   ³ ³  IC1   ³    R2  ³ ³    ³ ³ ³14 13 12 11 10  9  8 ³ ³ ³ ³
  55.     ³ ÚÄÅÄ´3      6ÃÄoÄ%%%%ÄÙ ³    ³ ³ ³         IC2         ³ ³ ³ ³
  56.     ³ ³ ³ ³        ³ ÀÄÄÄÄÄÄÄÄo    ³ ³ ³ 1  2  3  4  5  6  7 ³ ³ ³ ³
  57.     ÀÄÅÄÅÄ´4      5ÃÄÄÄÄ¿     ³    ³ ³ ÀÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÙ ³ ³ ³
  58.       ³ ³ ÀÄÄÄÄÄÄÄÄÙ    ³     ³    ³ ³   ³  ³  ³  ³  ³  ³  ³   ³ ³ ³
  59.       ³ ³           C1 ===   === C2³ ÀÄÄÄoÄÄÅÄÄÅÄÄÅÄÄÅÄÄÙ  ³   ³ ³ ÀÄÄCOM
  60.       ³ ³               ³     ³    ÀÄÄÄÄÄÅÄÄo  ³  ÀÄÄÅÄÄÄÄÄÅÄÄÄÅÄÅÄÄÄÄTIP
  61.       ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄoÄÄÄÄÄo          ³     ÀÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÅÄÅÄÄÄÄMID
  62.       ³                 ³     ÀÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄoÄÄÄÅÄÙ
  63.       ³                GND               ³           oÄÄÄÄÄÅÄÄÄÙ
  64.       ³                                  ³           ³     ³
  65.       ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ          RTS   GND
  66.                                                 TO RS232 CONNECTOR
  67.  
  68.  
  69.        Components needed
  70.        ~~~~~~~~~~~~~~~~~
  71.  
  72.        R1  1K   ohm resistor
  73.        R2  180K ohm resistor  (I used a 200K trimpot)
  74.        C1  0.1uF capacitor
  75.        C2  0.01uF capacitor
  76.        IC1 555 timer
  77.        IC2 4030 quad 2-input XOR
  78.        
  79.  
  80.  
  81.        ³          ³
  82.        ³          ³
  83.     ÄÄÄoÄÄÄ   ÄÄÄÄoÄÄÄÄÄ     THESE WIRES ARE JOINED TOGETHER
  84.        ³
  85.        ³
  86.  
  87.  
  88.        ³           ³
  89.     ÄÄÄÅÄÄÄÄ       ³
  90.        ³      ÄÄÄÄÄÅÄÄÄÄÄ    THESE WIRES ARE _NOT_ JOINED
  91.     ÄÄÄÅÄÄÄ        ³
  92.        ³           ³
  93.  
  94.  
  95.  
  96.      How it works
  97.      ~~~~~~~~~~~~
  98.  
  99.      The circuit consists of a 555 timer in it's astable configuration,
  100.      oscillating at 400Hz.  The output of the timer is XORed with the
  101.      DTR and RTS lines of the RS232 port, to control each lens separately.
  102.  
  103.      The RTS only verion takes the RTS input and inverts it through the
  104.      spare XOR gate, which feeds it to the former DTR input.  The changes
  105.      to the "How LCD's work" section should be fairly obvious.
  106.  
  107.  
  108.      How LCD's work
  109.      ~~~~~~~~~~~~~~
  110.  
  111.      The LCD panel is two sheets of polarised plastic/glass, with their
  112.      axes of polarizarion parallel to each other.  This means that the
  113.      light entering one piece is polarised, and then exits through the
  114.      other piece, as it has the same polarization.
  115.  
  116.      When an alternating electric field is passed through the liquid
  117.      crystal between the sheets, the polarization of the light is changed
  118.      by an amount inherent in the design of the LCD, usually 90 or 270
  119.      degrees, for minimum passage of light.
  120.  
  121.      When this light reaches the second polarized panel, the planes of
  122.      polarization are at 90 degrees to each other - and so no, or very
  123.      little light is transmitted.
  124.  
  125.      Electrical Connections
  126.      ~~~~~~~~~~~~~~~~~~~~~~
  127.  
  128.      The LCD panel is designed to turn opaque when a potential oscillating
  129.      between +10V and -10V is placed across it's connectors. This would mean
  130.      grounding one connector and placing an oscillating +/-10V potential on
  131.      the other.  Since getting -/+10V would unnecesarily complicate the
  132.      circuit, this effect is achieved by placing +10V across the connectors
  133.      and then, effectively, _REVERSING_ the connectors, letting current flow
  134.      the other way.  As far as the LCD is concerned, it's getting +/-10V.
  135.  
  136.      Practically, this is done by feeding the 555's output to each of the
  137.      connectors on the panels, namely, the backplane and the left and right
  138.      connectors.
  139.  
  140.      The square wave goes through 3 of the XORs, with the input to the one
  141.      connected to the backplane tied to ground so it acts as a simple buffer.
  142.      The DTR and RTS lines are connected to the inputs of the other two XORs.
  143.  
  144.      When the RTS and DTR lines are low, the outputs are in phase, and so
  145.      there is a potential difference of zero volts on each LCD, having no
  146.      effect on the crystals.
  147.  
  148.      When the DTR or RTS goes high, the output of the XOR is inverted with
  149.      respect to the input, giving a phase change of 180 degrees.  This gives
  150.      a potential difference of 10V which oscillates at the frequency of the
  151.      555 timer.
  152.  
  153.                    RTS HIGH         RTS LOW DTR HIGH          DTR LOW
  154.                        ³               ³       ³                 ³
  155.          ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿
  156.      BP  Ù ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ À
  157.          ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄÄÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿   ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿
  158.      L   Ù ÀÄÙ ÀÄÙ ÀÄÙ   ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÄÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ À
  159.          ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄÄÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄÄÄ¿ ÚÄ¿
  160.      R   Ù ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ   ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ   ÀÄÙ À
  161.  
  162.  
  163.      In the RTS/DTR version, one of the XOR gates is not used, so it's
  164.      inputs are tied low to prevent free oscillation, and the danger of
  165.      thermal damage.
  166.  
  167.      The circuit looks a bit complex, but pins 2 and 6 on the 555 can be
  168.      connected under the chip, and the same with 4 and 8, which makes
  169.      things a lot simpler.  Not much can be done for the 4030.
  170.  
  171.      The 180K resistor should give 398.89Hz if all the components are
  172.      exactly what they are marked, but since they rarely are, I used a
  173.      200K (or 500K, see below) variable resistor and a frequency counter
  174.      to get 400Hz.
  175.  
  176.      Some people might like to try a faster oscillator, as some video
  177.      cards and monitors can switch images at 70Hz and above.  As the
  178.      frame rate increases, it will start to interfere with the blanking
  179.      effect of the LCD.  It is possible to increase the oscillation to
  180.      above 400Hz, HOWEVER this _must_ be done with caution, as I do not
  181.      know what will happen to the crystals if they are pushed too far.
  182.      I have heard of people using 512Hz (crystal driven) with no ill
  183.      effects, but this is entirely at your own risk, and I cannot be held
  184.      responsible for any resulting damage.
  185.  
  186.  
  187.      The circuit can be fitted on a 5cm by 2cm piece of veroboard,
  188.      including the stereo socket.  This fits quite nicely in a project box
  189.      meant for an IR remote control, with the removeable front panel cut
  190.      to take a DB25 connector.
  191.  
  192.  
  193.      Here's the pinouts for the RS232 connector (DB9 and DB25 versions):
  194.  
  195.      RS232   9 pin     25 pin
  196.      ========================
  197.      RTS       4        20
  198.      DTR       7         4
  199.      GND       5         7
  200.  
  201.  
  202.      The whole thing is powered by a 9V battery from the battery holder in
  203.      rear of the box and has an on/off switch on the side.  There is also a
  204.      power-on LED on the top and a LED on the DTR/RTS inputs to show me at a
  205.      glance if there is a signal _getting_ to the box before I start ripping
  206.      apart my code to find the bug.
  207.  
  208.  
  209.      Trouble Shooting
  210.      ================
  211.  
  212.      > Check the wiring.
  213.  
  214.      > Check that power is getting to all the chips.
  215.  
  216.      > Check the 555 is oscillating at ~400Hz on pin 3 and also on pins 1,
  217.        6 and 13 of the 4030.
  218.  
  219.      > Check the 3 ouputs to the stereo socket with an oscilloscope.
  220.  
  221.      > Tie the RTS and DTR pins high physically and confirm the waveform
  222.        is the same as the one drawn above.
  223.  
  224.      > Check that the RTS and DTR signals actually reach the 4030 with a
  225.        logic probe/CRO _ON THE PINS_, not just the DB25/DB9.
  226.  
  227.  
  228.  
  229.      Here's a sample program to test the glasses.  The word at the bottom of
  230.      the screen should be the lens you can see out of.  If the lenses are back
  231.      to front, simply switch the RTS and DTR wires.  DO NOT edit the program
  232.      to change the #defines of LEFT and RIGHT.  My programs will have an
  233.      option to reverse the lenses, and I hope most other programmers will do
  234.      so as well, but we _would_ like to set a standard, wouldn't we?
  235.  
  236.  
  237.  
  238. -------BEGIN-----cut here------
  239. /*******************************************************************************
  240. *                                                                              *
  241. *    This program is a simple demo to test that the glasses are working        *
  242. *    and that the lenses are the right way around.                             *
  243. *                                                                              *
  244. *    Glen Harris                                                               *
  245. *    2harrig@wench.ece.jcu.edu.au                                              *
  246. *                                                                              *
  247. *******************************************************************************/
  248.  
  249. #include <stdio.h>
  250. #include <dos.h>
  251.  
  252. unsigned int com_base[] =  { 0x3f8,    /* COM1 */
  253.                              0x2f8,    /* COM2 */
  254.                              0x3e8,    /* COM3 */
  255.                              0x2e8     /* COM4 */
  256.                            };      
  257.  
  258. #define BOTH  0          /* Both lenses clear */
  259. #define LEFT  1          /* Left lens clear */
  260. #define RIGHT 2          /* Right lens clear */
  261. #define NONE  3          /* Neither lens clear */
  262.  
  263. #define Glasses(x) outportb(base+4,(x))  /* Byte containing RTS and DTR bits */
  264.  
  265. void main(int argc)
  266. {
  267.     unsigned int base;                  /* Comm port base from which to work */
  268.     unsigned char left, right;
  269.  
  270.     base = com_base[1];           /* COM2 */
  271.  
  272.     if (argc == 1)           /* No options, */
  273.     {
  274.         left = LEFT;         /* so lenses are the */
  275.         right = RIGHT;       /* correct way around */
  276.     }
  277.     else                     /* If there is an option (any option), */
  278.     {
  279.         left = RIGHT;        /* switch the lenses to */
  280.         right = LEFT;        /* the other way around */
  281.         printf("Swapping lenses.\n");
  282.     }
  283.  
  284.     while(!kbhit())
  285.     {
  286.         printf("%s\n", "Left");
  287.         Glasses(left);            /* Clear left lens */
  288.         delay(500);               /* Wait half a second */
  289.         printf("%s\n", "Right");
  290.         Glasses(right);           /* Clear right lens */
  291.         delay(500);               /* Wait half a second */
  292.     }
  293.  
  294.     Glasses(BOTH);                /* Clear both lenses */
  295.  
  296.     getch();
  297. }
  298. ------END--------cut here----
  299.  
  300.  
  301.  
  302.